package cc.rengu.redp.bizimpl.upmp.service;

import cc.rengu.redp.bizimpl.upmp.domain.UpmpMenu;
import cc.rengu.redp.bizimpl.upmp.domain.UpmpRole;
import cc.rengu.redp.bizimpl.upmp.domain.UpmpUserInfo;
import cc.rengu.redp.bizimpl.upmp.vo.UpmpUserInfoVO;
import cc.rengu.redp.system.domain.UserConfig;

import java.util.List;

public interface IUpmpCacheService {

    /**
     * 测试 Redis是否连接成功
     */
    void testConnect() throws Exception;

    /**
     * 从缓存中获取用户
     *
     * @param userId 用户唯一标识 用户表ID
     * @return UpmpUserInfo
     */
    UpmpUserInfoVO getUser(String userId) throws Exception;

    /**
     * 从缓存中获取用户
     *
     * @param instId 用户所属法人行
     * @param loginId 用户登录账号
     * @return UpmpUserInfo
     */
    UpmpUserInfo getUser(String instId,String loginId) throws Exception;

    /**
     * 从缓存中获取用户角色
     *
     * @param userId 用户 ID
     * @return 角色集
     */
    List<UpmpRole> getRoles(String userId) throws Exception;

    /**
     * 从缓存中获取用户权限
     *
     * @param userId 用户 ID
     * @return 权限集
     */
    List<UpmpMenu> getPermissions(String userId) throws Exception;

    /**
     * 从缓存中获取用户个性化配置
     *
     * @param userId 用户 ID
     * @return 个性化配置
     */
    UserConfig getUserConfig(String userId) throws Exception;

    /**
     * 缓存用户信息，只有当用户信息是查询出来的，完整的，才应该调用这个方法
     * 否则需要调用下面这个重载方法
     *
     * @param user 用户信息
     */
    void saveUser(UpmpUserInfoVO user) throws Exception;

    /**
     * 缓存用户信息
     *
     * @param userId 用户名
     */
    void saveUser(String userId) throws Exception;

    /**
     * 缓存用户角色信息
     *
     * @param userId 用户名
     */
    void saveRoles(String userId) throws Exception;

    /**
     * 缓存用户权限信息
     *
     * @param userId 用户名
     */
    void savePermissions(String userId) throws Exception;

    /**
     * 缓存用户个性化配置
     *
     * @param userId 用户 ID
     */
    void saveUserConfigs(String userId) throws Exception;

    /**
     * 删除用户信息
     *
     * @param userId 用户名
     */
    void deleteUser(String userId) throws Exception;

    /**
     * 删除用户角色信息
     *
     * @param userId 用户名
     */
    void deleteRoles(String userId) throws Exception;

    /**
     * 删除用户权限信息
     *
     * @param userId 用户名
     */
    void deletePermissions(String userId) throws Exception;

    /**
     * 删除用户个性化配置
     *
     * @param userId 用户 ID
     */
    void deleteUserConfigs(String userId) throws Exception;

}
